package com.huli.service.impl;

import com.huli.domain.OrderInfo;
import com.huli.mapper.*;
import com.huli.pojo.NursingProject;
import com.huli.pojo.Patient;
import com.huli.pojo.SysUser;
import com.huli.service.OrderInfoPatientService;
import com.huli.vo.OrderInfoPatientVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Collections;
import java.util.Date;
import java.util.List;

@Service
public class OrderInfoPatientServiceImpl implements OrderInfoPatientService {
    // 注入OrderInfoPatientMapper
    @Autowired
    private OrderInfoPatientMapper orderInfoPatientMapper;
    // 注入NursingProjectMapper
    @Autowired
    private NursingProjectMapper nursingProjectMapper;
    // 注入SysUserMapper
    @Autowired
    private SysUserMapper sysUserMapper;
    // 注入PatientMapper
    @Autowired
    private PatientMapper patientMapper;
    @Autowired
    private OrderInfoMapper orderInfoMapper;
    // 获取订单信息列表
    @Override
    public List<OrderInfoPatientVo> getOrderInfoPatientList() {
        // 调用orderInfoPatientMapper的getOrderInfoPatientList方法获取订单信息列表
        List<OrderInfoPatientVo> orderInfoPatientVoList =  orderInfoPatientMapper.getOrderInfoPatientList();
        // 遍历订单信息列表
        for (OrderInfoPatientVo orderInfoPatientVo : orderInfoPatientVoList) {
            // 根据订单信息中的项目id获取项目信息
            NursingProject nursingProject = nursingProjectMapper.nursingProjectById(orderInfoPatientVo.getProjectId());
            // 设置订单信息中的项目名称
            orderInfoPatientVo.setProjectName(nursingProject.getProjectName());
            // 根据订单信息中的用户id获取用户信息
            SysUser sysUser = sysUserMapper.selectUserById(orderInfoPatientVo.getUserId());
            if (sysUser.getId() == null){
                orderInfoPatientVo.setUserName(null);
            }else {
                // 设置订单信息中的用户名称
                orderInfoPatientVo.setUserName(sysUser.getRealName());
            }
            // 根据订单信息中的患者id获取患者信息
            Patient patient = patientMapper.getPatientById(orderInfoPatientVo.getPatientId());
            // 设置订单信息中的患者名称
            orderInfoPatientVo.setPatientName(patient.getPatientName());
            // 设置订单信息中的患者地址
            orderInfoPatientVo.setAddress(patient.getIdNumber());
        }
        // 返回订单信息列表
        return orderInfoPatientVoList;
    }
    // 获取订单信息列表0
    @Override
    public List<OrderInfoPatientVo> getOrderInfoPatientList0() {
        // 调用orderInfoPatientMapper的getOrderInfoPatientList0方法获取订单信息列表
        List<OrderInfoPatientVo> orderInfoPatientVoList =  orderInfoPatientMapper.getOrderInfoPatientList0();
        // 遍历订单信息列表
        for (OrderInfoPatientVo orderInfoPatientVo : orderInfoPatientVoList) {
            // 根据订单信息中的项目id获取项目信息
            NursingProject nursingProject = nursingProjectMapper.nursingProjectById(orderInfoPatientVo.getProjectId());
            // 设置订单信息中的项目名称
            orderInfoPatientVo.setProjectName(nursingProject.getProjectName());
            // 根据订单信息中的用户id获取用户信息
            SysUser sysUser = sysUserMapper.selectUserById(orderInfoPatientVo.getUserId());
            // 设置订单信息中的用户名称
            orderInfoPatientVo.setUserName(sysUser.getRealName());
            // 根据订单信息中的患者id获取患者信息
            Patient patient = patientMapper.getPatientById(orderInfoPatientVo.getPatientId());
            // 设置订单信息中的患者名称
            orderInfoPatientVo.setPatientName(patient.getPatientName());
            // 设置订单信息中的患者地址
            orderInfoPatientVo.setAddress(patient.getIdNumber());
        }
        // 返回订单信息列表
        return orderInfoPatientVoList;
    }
    // 获取订单信息列表1
    @Override
    public List<OrderInfoPatientVo> getOrderInfoPatientList1() {
        // 调用orderInfoPatientMapper的getOrderInfoPatientList1方法获取订单信息列表
        List<OrderInfoPatientVo> orderInfoPatientVoList =  orderInfoPatientMapper.getOrderInfoPatientList1();
        // 遍历订单信息列表
        for (OrderInfoPatientVo orderInfoPatientVo : orderInfoPatientVoList) {
            // 根据订单信息中的项目id获取项目信息
            NursingProject nursingProject = nursingProjectMapper.nursingProjectById(orderInfoPatientVo.getProjectId());
            // 设置订单信息中的项目名称
            orderInfoPatientVo.setProjectName(nursingProject.getProjectName());
            // 根据订单信息中的用户id获取用户信息
            SysUser sysUser = sysUserMapper.selectUserById(orderInfoPatientVo.getUserId());
            // 设置订单信息中的用户名称
            orderInfoPatientVo.setUserName(sysUser.getRealName());
            // 根据订单信息中的患者id获取患者信息
            Patient patient = patientMapper.getPatientById(orderInfoPatientVo.getPatientId());
            // 设置订单信息中的患者名称
            orderInfoPatientVo.setPatientName(patient.getPatientName());
            // 设置订单信息中的患者地址
            orderInfoPatientVo.setAddress(patient.getIdNumber());
        }
        // 返回订单信息列表
        return orderInfoPatientVoList;
    }
    // 获取订单信息列表2
    @Override
    public List<OrderInfoPatientVo> getOrderInfoPatientList2() {
        // 调用orderInfoPatientMapper的getOrderInfoPatientList2方法获取订单信息列表
        List<OrderInfoPatientVo> orderInfoPatientVoList =  orderInfoPatientMapper.getOrderInfoPatientList2();
        // 遍历订单信息列表
        for (OrderInfoPatientVo orderInfoPatientVo : orderInfoPatientVoList) {
            // 根据订单信息中的项目id获取项目信息
            NursingProject nursingProject = nursingProjectMapper.nursingProjectById(orderInfoPatientVo.getProjectId());
            // 设置订单信息中的项目名称
            orderInfoPatientVo.setProjectName(nursingProject.getProjectName());
            // 根据订单信息中的用户id获取用户信息
            SysUser sysUser = sysUserMapper.selectUserById(orderInfoPatientVo.getUserId());
            // 设置订单信息中的用户名称
            orderInfoPatientVo.setUserName(sysUser.getRealName());
            // 根据订单信息中的患者id获取患者信息
            Patient patient = patientMapper.getPatientById(orderInfoPatientVo.getPatientId());
            // 设置订单信息中的患者名称
            orderInfoPatientVo.setPatientName(patient.getPatientName());
            // 设置订单信息中的患者地址
            orderInfoPatientVo.setAddress(patient.getIdNumber());
        }
        // 返回订单信息列表
        return orderInfoPatientVoList;
    }
    // 获取订单信息列表3
    @Override
    public List<OrderInfoPatientVo> getOrderInfoPatientList3() {
        // 调用orderInfoPatientMapper的getOrderInfoPatientList3方法获取订单信息列表
        List<OrderInfoPatientVo> orderInfoPatientVoList =  orderInfoPatientMapper.getOrderInfoPatientList3();
        // 遍历订单信息列表
        for (OrderInfoPatientVo orderInfoPatientVo : orderInfoPatientVoList) {
            // 根据订单信息中的项目id获取项目信息
            NursingProject nursingProject = nursingProjectMapper.nursingProjectById(orderInfoPatientVo.getProjectId());
            // 设置订单信息中的项目名称
            orderInfoPatientVo.setProjectName(nursingProject.getProjectName());
            // 根据订单信息中的用户id获取用户信息
            SysUser sysUser = sysUserMapper.selectUserById(orderInfoPatientVo.getUserId());
            // 设置订单信息中的用户名称
            orderInfoPatientVo.setUserName(sysUser.getRealName());
            // 根据订单信息中的患者id获取患者信息
            Patient patient = patientMapper.getPatientById(orderInfoPatientVo.getPatientId());
            // 设置订单信息中的患者名称
            orderInfoPatientVo.setPatientName(patient.getPatientName());
            // 设置订单信息中的患者地址
            orderInfoPatientVo.setAddress(patient.getIdNumber());
        }
        // 返回订单信息列表
        return orderInfoPatientVoList;
    }
    // 获取订单信息列表4
    @Override
    public List<OrderInfoPatientVo> getOrderInfoPatientList4() {
        // 调用orderInfoPatientMapper的getOrderInfoPatientList4方法获取订单信息列表
        List<OrderInfoPatientVo> orderInfoPatientVoList =  orderInfoPatientMapper.getOrderInfoPatientList4();
        // 遍历订单信息列表
        for (OrderInfoPatientVo orderInfoPatientVo : orderInfoPatientVoList) {
            // 根据订单信息中的项目id获取项目信息
            NursingProject nursingProject = nursingProjectMapper.nursingProjectById(orderInfoPatientVo.getProjectId());
            // 设置订单信息中的项目名称
            orderInfoPatientVo.setProjectName(nursingProject.getProjectName());
            // 根据订单信息中的用户id获取用户信息
            SysUser sysUser = sysUserMapper.selectUserById(orderInfoPatientVo.getUserId());
            // 设置订单信息中的用户名称
            orderInfoPatientVo.setUserName(sysUser.getRealName());
            // 根据订单信息中的患者id获取患者信息
            Patient patient = patientMapper.getPatientById(orderInfoPatientVo.getPatientId());
            // 设置订单信息中的患者名称
            orderInfoPatientVo.setPatientName(patient.getPatientName());
            // 设置订单信息中的患者地址
            orderInfoPatientVo.setAddress(patient.getIdNumber());
        }
        // 返回订单信息列表
        return orderInfoPatientVoList;
    }
    // 更新预约时间
    @Override
    public void updateAppointmentTime(Long id, Date finishTime) {
        // 调用orderInfoPatientMapper的updateAppointmentTime方法更新预约时间
        orderInfoPatientMapper.updateAppointmentTime(id,finishTime);
    }

    // 删除订单
    @Override
    public void deleteOrder(Long id) {
        // 调用orderInfoPatientMapper的deleteOrder方法删除订单
        orderInfoPatientMapper.deleteOrder(id);
    }

    @Override
    public List<OrderInfo> getOrder() {
        return orderInfoPatientMapper.getOrder();
    }

    @Override
    public List<OrderInfo> getOrderInfoPatientListNotOk() {
        List<OrderInfo> allList = orderInfoMapper.getListAll();
        for (OrderInfo orderInfo : allList) {
            if(orderInfo.getOrderStatus()==1 && orderInfo.getOrderStatus()==2)
                return orderInfoMapper.selectBylist(orderInfo.getOrderStatus());
            }
        return allList;
    }

    @Override
    public List<OrderInfo> getOrderInfoPatientListNotOk1() {
        List<OrderInfo>list=orderInfoMapper.getOrderInfoPatientListNotOk1();
        return list;
    }
}
